home *** CD-ROM | disk | FTP | other *** search
- ------------- Listing 8: The file osistrea.c -----------------
-
- // osistream -- ostream::operator<<(streambuf&)
- #include <ostream>
-
- ostream& ostream::operator<<(streambuf& sb)
- { // insert from streambuf
- _Bool copied = 0;
- _TRY_IO_BEGIN
- if (opfx())
- { // copy characters until failure
- char buf[512];
- int n;
- for (; 0 < (n = sb.sgetn(buf, sizeof (buf)));
- copied = 1)
- _TRY_BEGIN
- if (rdbuf()->sputn(buf, n) != n)
- break;
- _CATCH_ALL
- setstate(failbit);
- _RERAISE;
- _CATCH_END
- }
- if (!copied)
- setstate(failbit);
- osfx();
- _CATCH_IO_END
- return (*this);
- }
-
-